import * as webpack from "webpack";
import "webpack-dev-server";

import commonConfig from "./webpack.common";

const { merge } = require("webpack-merge");
const path = require("path");
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
const smp = new SpeedMeasurePlugin();

const config: webpack.Configuration = merge(commonConfig, {
  mode: "development",
  devtool: "inline-source-map",
  output: {
    filename: "[name].bundle.js",
    path: path.resolve(process.cwd(), "dist"),
    clean: true,
  },
  devServer: {
    static: {
      directory: path.join(process.cwd(), "dist"),
    },
    compress: true,
    port: 9000,
    hot: true,
    open: true,
    historyApiFallback: true,
  },
  // 使用的是文件缓存
  cache: {
    type: "filesystem", // 启用文件系统缓存（必填）
    // 自定义缓存目录（默认：node_modules/.cache/webpack）
    cacheDirectory: path.resolve(__dirname, ".webpack-cache"),
    // 缓存版本（配置/依赖变更时，修改版本可强制失效缓存）
    version: "1.0.0", // 如：升级 Babel 后改为 '1.1.0'
    // 缓存有效期（默认永久，单位：毫秒）
    maxAge: 30 * 24 * 60 * 60 * 1000, // 30 天
    // 缓存压缩（节省磁盘空间，默认 false）
    compression: "gzip",
    // 缓存模块的条件（默认缓存所有模块）
    module: {
      // 不缓存 node_modules 中的模块（可选，视场景而定）
      // exclude: [/node_modules/],
    },
    // 缓存构建依赖（如配置文件、loader 等）
    buildDependencies: {
      // 当 webpack.config.js 变化时，缓存失效
      config: [__filename],
      // 当 package.json 变化时（依赖版本变更），缓存失效
      packageLock: [path.resolve(__dirname, "package-lock.json")],
    },
  },
});

export default smp.wrap(config);
